#include "bool_interval.h"

const BoolInterval alltrue = BoolInterval(true, true);
const BoolInterval halftrue = BoolInterval(false, true);
const BoolInterval notrue = BoolInterval(false, false);

BoolInterval::BoolInterval(bool a, bool b) :
    a_(a), b_(b) {
        assertInvariant();
}

bool BoolInterval::a() const {
  return a_;
}

bool BoolInterval::b() const {
  return b_;
}

BoolInterval BoolInterval::not_() const {
  assertInvariant();
  return BoolInterval(!a_ && !b_, !b_ || !a_);  // （F,T）仍然会是(F,T)
}

void swap(BoolInterval& a, BoolInterval& b) {
    a.assertInvariant(); b.assertInvariant();

    using std::swap;
    swap(a.a_, b.a_);
    swap(a.b_, b.b_);
}

bool operator==(const BoolInterval& l, const BoolInterval& r) {
  l.assertInvariant(); r.assertInvariant();
  return l.a_ == r.a_ && l.b_ == r.b_;
}

// -------出错终止程序------- //
void BoolInterval::assertInvariant() const {
  //assert(!a_ || b_);  //（T,F）终止，因为T>F 区间左端应小于右端 检查区间合法性
}
